package demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 涛
 * Date: 2023-10-26
 * Time: 10:16
 */






//无返回值无参数
@FunctionalInterface
interface NoParameterNoReturn {
    void test();
}
//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {
    void test(int a);
}
//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {
    void test(int a,int b);
}
//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {
    int test();
}
//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {
    int test(int a);
}
//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {
    int test(int a,int b);
}
public class Test {
    public static void main(String[] args) {
        MoreParameterReturn moreParameterReturn1 = new MoreParameterReturn() {
            @Override
            public int test(int a, int b) {
                System.out.println("重写了带有一个参数的test方法，参数：" + a + " " + b);
                return a + b;
            }
        };
        System.out.println(moreParameterReturn1.test(10, 10));

        MoreParameterReturn moreParameterReturn2 = (int a, int b) -> {System.out.println("重写了带有一个参数的test方法，参数：" + a + " " + b);return a + b;};
        System.out.println(moreParameterReturn2.test(20, 20));
    }
    public static void main5(String[] args) {
        //不使用lambda表达式
        OneParameterReturn oneParameterReturn1 = new OneParameterReturn() {
            @Override
            public int test(int a) {
                System.out.println("重写了带有一个参数的test方法，参数：" + a);
                return a;
            }
        };
        System.out.println(oneParameterReturn1.test(10));
        //使用lambda表达式
        OneParameterReturn oneParameterReturn2 = (int a) -> {System.out.println("重写了带有一个参数的test方法，参数：" + a);return a;};
        System.out.println(oneParameterReturn2.test(20));
    }
    public static void main4(String[] args) {
        //不使用lambda表达式
        NoParameterReturn noParameterReturn1 = new NoParameterReturn() {
            @Override
            public int test() {
                System.out.println("重写了不带参数的test方法，有返回值");
                return 10;
            }
        };
        System.out.println(noParameterReturn1.test());
        System.out.println("======================");
        //使用lambda表达式
        NoParameterReturn noParameterReturn = () -> {System.out.println("重写了不带参数的test方法，有返回值");return 20;};
        System.out.println(noParameterReturn.test());
    }
    public static void main3(String[] args) {
        //不使用lambda表达式
        MoreParameterNoReturn moreParameterNoReturn1 = new MoreParameterNoReturn() {
            @Override
            public void test(int a, int b) {
                System.out.println("为重写了带有2个参数的test方法，参数：" + a + " " + b);
            }
        };
        moreParameterNoReturn1.test(10,20);
        //使用lambda表达式
        MoreParameterNoReturn moreParameterNoReturn2 = (int a, int b) -> {System.out.println("为重写了带有2个参数的test方法，参数：" + a + " " + b);};
        moreParameterNoReturn2.test(30,40);
    }
    public static void main2(String[] args) {
        //不使用lambda表达式
        OneParameterNoReturn oneParameterNoReturn1 = new OneParameterNoReturn() {
            @Override
            public void test(int a) {
                System.out.println("为重写了带有一个参数的test方法，参数：" + a);
            }
        };
        oneParameterNoReturn1.test(10);
        System.out.println("===================");
      //使用lambda表达式
        OneParameterNoReturn oneParameterNoReturn2 = (int a) -> { System.out.println("重写了带有一个参数的test方法，参数为：" + a);};
        oneParameterNoReturn2.test(20);
    }
    public static void main1(String[] args) {
        NoParameterNoReturn noParameterNoReturn = () -> { System.out.println("重写了test方法");};
        noParameterNoReturn.test();
//        NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn() {
//            @Override
//            public void test() {
//                System.out.println("重写了NoParameterNoReturn接口的方法");
//            }
//        };
//        noParameterNoReturn.test();
    }
}
